#ifndef SO2_H
#define SO2_H

#include <cmath>
#include <Eigen/Dense>

using namespace std;
using namespace Eigen;

class SO2 {
public:
	SO2();
	SO2(const double& t);
	SO2(const SO2& other);
    SO2 operator*(SO2& other) const;
    SO2 operator*(const SO2& other) const;
    SO2 operator-(const SO2& other) const;
    // SO2 operator+=(SO2& other) const;
	Eigen::Matrix2d matrix();
	static Eigen::Matrix2d Exp(const double& t);
	static double exp(const Eigen::Matrix2d& R);
	static SO2 exp(const double& t);
	double inv();
	Eigen::Matrix2d inverse();
	double log();
	Eigen::Matrix2d so2();
	static Eigen::Matrix2d so2(const double& v);
	
	static double Normalize(const double &t);

private:
	double t_;
};

#endif
